package ar.edu.utn.frba.dds.opendesigners.user;

import java.math.BigDecimal;

import ar.edu.utn.frba.dds.opendesigners.ParametroBusqueda;
import ar.edu.utn.frba.dds.opendesigners.AgenteDeViaje;
import ar.edu.utn.frba.dds.opendesigners.excepciones.ExcepcionCompraAsiento;
import ar.edu.utn.frba.dds.opendesigners.excepciones.ExcepcionNegocio;
import ar.edu.utn.frba.dds.opendesigners.resultados.ResultadoBusqueda;
import ar.edu.utn.frba.dds.opendesigners.resultados.Asiento;

public class Libre implements Suscripcion {
	public AgenteDeViaje agenteDeViaje;
	private BigDecimal recargo;
	private BigDecimal precioExcluido;
	
	public Libre() {
		this.agenteDeViaje = AgenteDeViaje.getInstance();
		this.recargo = new BigDecimal(20);
		this.precioExcluido = new BigDecimal(4000);
	}
	
	@Override
	public ResultadoBusqueda buscar(ParametroBusqueda parametroBusqueda) {
		ResultadoBusqueda resultado = new ResultadoBusqueda();
		
		resultado.getListaResultados().addAll(parametroBusqueda.buscar().filtrarPor(this.precioExcluido));
		
		resultado.agregarRecargo(this.recargo);
		return resultado;
	}

	@Override
	public void comprar(Asiento asiento){
		try {
			asiento.comprar();	
		} catch (ExcepcionCompraAsiento fallaCompraAsiento) {
			throw new ExcepcionNegocio("No se pudo comprar el asiento");
		}
	}
	
	@Override
	public void reservar(Asiento asiento, Usuario usuario){
		throw new ExcepcionNegocio("Funcion solo para suscripcion Estandar");
	}
}
